var Strategy = (function() {
    // 这里是提前封装好的一组一组的策略 这个对象就叫做策略对象
    var _S = {
        username: function(str) {
            //字母开头，数字字母下划线5-8位
            var reg = /^[a-zA-Z]\w{5,8}$/;
            return reg.test(str);
        },
        password: function(str) {
            //数字字母下划线6-10位
            var reg = /^\w{6,10}$/;
            return reg.test(str);
        },
        email: function(str) {
            var reg = /email/;
            return reg.test(str);
        }
    }

    // 返回一个对象 该对象有两个方法
    return {
        // 使用策略的方法
        use: function(type, value) {
            if (_S[type]) {
                return _S[type](value);
            }
            throw new Error(type + "策略不存在")
        },
        // 添加策略的方法
        add: function(type, fun) {
            if (_S[type]) {
                throw new Error(type + "策略已存在 请不要替换")
            }
            _S[type] = fun;
        }
    }
})()